From: Colin Walters Date: Tue, 12 Sep 2017 20:58:58 +0000 (-0400) Subject: lib/repo: Port gpg signing function to new code style X-Git-Tag: archive/raspbian/2022.1-3+rpi1~1^2~4^2~31^2~76 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=74996202544883ae2dc49407f44b05a09f5bc311;p=ostree.git lib/repo: Port gpg signing function to new code style We already had all of the autocleanups ready for this. Closes: #1164 Approved by: jlebon --- diff --git a/src/libostree/ostree-repo.c b/src/libostree/ostree-repo.c index 0a7cf3e3..08403599 100644 --- a/src/libostree/ostree-repo.c +++ b/src/libostree/ostree-repo.c @@ -4191,88 +4191,52 @@ sign_data (OstreeRepo *self, GCancellable *cancellable, GError **error) { - gboolean ret = FALSE; g_auto(GLnxTmpfile) tmpf = { 0, }; - g_autoptr(GOutputStream) tmp_signature_output = NULL; - gpgme_ctx_t context = NULL; - g_autoptr(GBytes) ret_signature = NULL; - gpgme_error_t err; - gpgme_key_t key = NULL; - gpgme_data_t commit_buffer = NULL; - gpgme_data_t signature_buffer = NULL; - g_autoptr(GMappedFile) signature_file = NULL; - if (!glnx_open_tmpfile_linkable_at (self->tmp_dir_fd, ".", O_RDWR | O_CLOEXEC, &tmpf, error)) - goto out; - tmp_signature_output = g_unix_output_stream_new (tmpf.fd, FALSE); + return FALSE; + g_autoptr(GOutputStream) tmp_signature_output = g_unix_output_stream_new (tmpf.fd, FALSE); - context = ot_gpgme_new_ctx (homedir, error); + g_auto(gpgme_ctx_t) context = ot_gpgme_new_ctx (homedir, error); if (!context) - goto out; + return FALSE; /* Get the secret keys with the given key id */ - err = gpgme_get_key (context, key_id, &key, 1); + g_auto(gpgme_key_t) key = NULL; + gpgme_error_t err = gpgme_get_key (context, key_id, &key, 1); if (gpgme_err_code (err) == GPG_ERR_EOF) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, - "No gpg key found with ID %s (homedir: %s)", key_id, - homedir ? homedir : ""); - goto out; - } + return glnx_throw (error, "No gpg key found with ID %s (homedir: %s)", key_id, + homedir ? homedir : ""); else if (err != GPG_ERR_NO_ERROR) - { - ot_gpgme_throw (err, error, "Unable to lookup key ID %s", key_id); - goto out; - } + return ot_gpgme_throw (err, error, "Unable to lookup key ID %s", key_id); /* Add the key to the context as a signer */ if ((err = gpgme_signers_add (context, key)) != GPG_ERR_NO_ERROR) - { - ot_gpgme_throw (err, error, "Error signing commit"); - goto out; - } + return ot_gpgme_throw (err, error, "Error signing commit"); - { - gsize len; - const char *buf = g_bytes_get_data (input_data, &len); - if ((err = gpgme_data_new_from_mem (&commit_buffer, buf, len, FALSE)) != GPG_ERR_NO_ERROR) - { - ot_gpgme_throw (err, error, "Failed to create buffer from commit file"); - goto out; - } - } - - signature_buffer = ot_gpgme_data_output (tmp_signature_output); + /* Get a gpg buffer from the commit */ + g_auto(gpgme_data_t) commit_buffer = NULL; + gsize len; + const char *buf = g_bytes_get_data (input_data, &len); + if ((err = gpgme_data_new_from_mem (&commit_buffer, buf, len, FALSE)) != GPG_ERR_NO_ERROR) + return ot_gpgme_throw (err, error, "Failed to create buffer from commit file"); + /* Sign it */ + g_auto(gpgme_data_t) signature_buffer = ot_gpgme_data_output (tmp_signature_output); if ((err = gpgme_op_sign (context, commit_buffer, signature_buffer, GPGME_SIG_MODE_DETACH)) != GPG_ERR_NO_ERROR) - { - ot_gpgme_throw (err, error, "Failure signing commit file"); - goto out; - } - + return ot_gpgme_throw (err, error, "Failure signing commit file"); if (!g_output_stream_close (tmp_signature_output, cancellable, error)) - goto out; - - signature_file = g_mapped_file_new_from_fd (tmpf.fd, FALSE, error); + return FALSE; + + /* Return a mmap() reference */ + g_autoptr(GMappedFile) signature_file = g_mapped_file_new_from_fd (tmpf.fd, FALSE, error); if (!signature_file) - goto out; - ret_signature = g_mapped_file_get_bytes (signature_file); - - ret = TRUE; + return FALSE; + if (out_signature) - *out_signature = g_steal_pointer (&ret_signature); -out: - if (commit_buffer) - gpgme_data_release (commit_buffer); - if (signature_buffer) - gpgme_data_release (signature_buffer); - if (key) - gpgme_key_release (key); - if (context) - gpgme_release (context); - return ret; + *out_signature = g_mapped_file_get_bytes (signature_file); + return TRUE; } /**